package secondStage.part5.多线程.线程同步;

/**
 * @ClassName: [SellTicketDemo4]
 * @Description: 线程同步
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-05]
 * @Version: [v1.0]
 */
/*
2.2卖票案例数据安全问题的解决
为什么出现问题?(这也是我们判断多线程程序是否会有数据安全问题的标准)
    ●是否是多线程环境
    ●是否有共享数据
    ●是否有多条语句操作共享数据
如何解决多线程安全问题呢?
    ●基本思想: 让程序没有安全问题的环境
怎么实现呢?
    ●把多条语句操作共享数据的代码给锁起来, 让任意时刻只能有一个线程执行即可
2.3同步代码块
锁多条语句操作共享数据，可以使用同步代码块实现
●格式:
    synchronized(任意对象) {
        多条语句操作共享数据的代码
    }
●synchronized(任意对象): 就相当于给代码加锁了,任意对象就可以看成是一把锁
同步的好处和弊端
●好处:解决了多线程的数据安全问题
●弊端:当线程很多时，因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率
 */
public class SellTicketDemo2 {
    public static void main(String[] args) {
        //创建SellTicket类对象
        SellTicket2 st = new SellTicket2();
        //创建三个Thread类的对象，吧SellTicket对象作为构造方法的参数
        Thread t1 = new Thread(st, "窗口1");
        Thread t2 = new Thread(st, "窗口2");
        Thread t3 = new Thread(st, "窗口3");
        //启动线程
        t1.start();
        t2.start();
        t3.start();
    }
}
